package com.zs.letcode.illustration_of_algorithm;

/**
 * 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
 * 输入一个整数数组，实现一个函数来调整该数组中数字的顺序，使得所有奇数位于数组的前半部分，所有偶数位于数组的后半部分。
 * <p>
 *
 * <p>
 * 示例：
 * <p>
 * 输入：nums =[1,2,3,4]
 * 输出：[1,3,2,4]
 * 注：[3,1,2,4] 也是正确的答案之一。
 *
 * <p>
 * 提示：
 * <p>
 * 0 <= nums.length <= 50000
 * 1 <= nums[i] <= 10000
 * 相关标签
 * 数组
 * 双指针
 * 排序
 * <p>
 * Java
 * <p>
 * <p>
 * <p>
 * 作者：Krahets
 * 链接：https://leetcode-cn.com/leetbook/read/illustration-of-algorithm/5v8a6t/
 * 来源：力扣（LeetCode）
 * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 *
 * @author madison
 * @description
 * @date 2021/8/27 10:11
 */
public class Chapter56 {
    public static void main(String[] args) {
        Solution solution = new Solution();
        solution.exchange(new int[]{1, 2, 3, 4});
    }

    private static class Solution {
        public int[] exchange(int[] nums) {
            int left = 0, right = nums.length - 1;
            while (left < right) {
                if (nums[left] % 2 == 0 && nums[right] % 2 == 1) {
                    int temp = nums[left];
                    nums[left] = nums[right];
                    nums[right] = temp;
                }
                if (nums[left] % 2 == 1) {
                    left++;
                }
                if (nums[right] % 2 == 0) {
                    right--;
                }
            }
            return nums;
        }

        public int[] exchange1(int[] nums) {
            int i = 0, j = nums.length - 1, tmp;
            while (i < j) {
                while (i < j && (nums[i] & 1) == 1) i++;
                while (i < j && (nums[j] & 1) == 0) j--;
                tmp = nums[i];
                nums[i] = nums[j];
                nums[j] = tmp;
            }
            return nums;
        }
    }
}
